package org.ciallo.easytokencore.util;

import java.util.List;
import java.util.Map;

/**
 * 数据验证工具类
 *
 * <p>核心功能：</p>
 * <ul>
 *   <li>提供全面的null/empty检查方法</li>
 *   <li>支持多种数据类型验证</li>
 *   <li>线程安全的静态方法</li>
 * </ul>
 *
 * <p>方法分类：</p>
 * <ul>
 *   <li>通用对象检查: isNull/isNotNull</li>
 *   <li>字符串检查: isNull(String)/isNotNull(String)</li>
 *   <li>数值类型检查: Long/Integer/Double</li>
 *   <li>集合类型检查: List/Map/数组</li>
 * </ul>
 *
 * <p>使用示例：</p>
 * <pre>
 * {@code
 * // 检查字符串非空
 * if(VerificationUtils.isNotNull(input)) {
 *     // 处理逻辑
 * }
 *
 * // 检查列表非空
 * if(VerificationUtils.isNotNullOrEmpty(userList)) {
 *     // 处理逻辑
 * }
 * }
 * </pre>
 *
 * @Description: 数据验证工具类
 * @Author: Jukomu
 * @Package: org.ciallo.easytokencore.util
 * @Project: easy-token-demo
 * @Version: 1.0.0
 * @name: VerificationUtils
 * @Date: 2025-05-06
 * @Filename: VerificationUtils
 */
public class VerificationUtils {
    /**
     * 检查对象是否为null或者为空字符串
     *
     * @param param 要检查的对象
     * @return 如果对象为null或者为空字符串，则返回true；否则返回false
     */
    public static boolean isNull(Object param) {
        return param == null || "".equals(param);
    }

    /**
     * 检查对象是否不为null且不为空字符串
     *
     * @param param 要检查的对象
     * @return 如果对象不为null且不为空字符串，则返回true；否则返回false
     */
    public static boolean isNotNull(Object param) {
        return param != null && !"".equals(param);
    }

    /**
     * 检查字符串是否为null或者为空字符串
     *
     * @param param 待检查的字符串
     * @return 如果字符串为null或为空字符串，则返回true；否则返回false
     */
    public static boolean isNull(String param) {
        return param == null || param.isEmpty();
    }

    /**
     * 检查字符串是否不为null且不为空
     *
     * @param param 要检查的字符串
     * @return 如果字符串不为null且不为空，则返回true；否则返回false
     */
    public static boolean isNotNull(String param) {
        return param != null && !param.isEmpty();
    }

    /**
     * 检查长整型是否为null
     *
     * @param param 要检查的长整型参数
     * @return 如果参数为null，则返回true；否则返回false
     */
    public static boolean isNull(Long param) {
        return param == null;
    }

    /**
     * 检查长整型是否不为null。
     *
     * @param param 要检查的长整型值
     * @return 如果param不为null，则返回true；否则返回false
     */
    public static boolean isNotNull(Long param) {
        return param != null;
    }

    /**
     * 检查整数是否为null
     *
     * @param param 要检查的整数
     * @return 如果参数为null，则返回true；否则返回false
     */
    public static boolean isNull(Integer param) {
        return param == null;
    }

    /**
     * 检查整数是否不为null
     *
     * @param param 要检查的整数
     * @return 如果参数不为null，则返回true；否则返回false
     */
    public static boolean isNotNull(Integer param) {
        return param != null;
    }

    /**
     * 检查双精度浮点数是否为null
     *
     * @param param 要检查的双精度浮点数
     * @return 如果参数为null，则返回true；否则返回false
     */
    public static boolean isNull(Double param) {
        return param == null;
    }

    /**
     * 检查双精度浮点数是否不为null
     *
     * @param param 要检查的双精度浮点数
     * @return 如果参数不为null，则返回true；否则返回false
     */
    public static boolean isNotNull(Double param) {
        return param != null;
    }

    /**
     * 检查列表是否为null或空
     *
     * @param list 要检查的列表
     * @return 如果列表为null或空，则返回true；否则返回false
     */
    public static boolean isNullOrEmpty(List<?> list) {
        return list == null || list.isEmpty();
    }

    /**
     * 检查列表是否不为null且不为空
     *
     * @param list 要检查的列表
     * @return 如果列表不为null且不为空，则返回true；否则返回false
     */
    public static boolean isNotNullOrEmpty(List<?> list) {
        return list != null && !list.isEmpty();
    }

    /**
     * 检查Map是否为null或空
     *
     * @param map 要检查的Map
     * @return 如果Map为null或空，则返回true；否则返回false
     */
    public static boolean isNullOrEmpty(Map<?, ?> map) {
        return map == null || map.isEmpty();
    }

    /**
     * 检查Map是否不为null且不为空
     *
     * @param map 要检查的Map
     * @return 如果Map不为null且不为空，则返回true；否则返回false
     */
    public static boolean isNotNullOrEmpty(Map<?, ?> map) {
        return map != null && !map.isEmpty();
    }

    /**
     * 检查数组是否为null或空
     *
     * @param array 要检查的数组
     * @return 如果数组为null或空，则返回true；否则返回false
     */
    public static boolean isNullOrEmpty(Object[] array) {
        return array == null || array.length == 0;
    }

    /**
     * 检查数组是否不为null且不为空
     *
     * @param array 要检查的数组
     * @return 如果数组不为null且不为空，则返回true；否则返回false
     */
    public static boolean isNotNullOrEmpty(Object[] array) {
        return array != null && array.length > 0;
    }

    /**
     * 检查布尔值是否为null
     *
     * @param bool 要检查的布尔值
     * @return 如果布尔值为null，则返回true；否则返回false
     */
    public static boolean isNull(Boolean bool) {
        return bool == null;
    }

    /**
     * 检查布尔值是否不为null
     *
     * @param bool 要检查的布尔值
     * @return 如果布尔值不为null，则返回true；否则返回false
     */
    public static boolean isNotNull(Boolean bool) {
        return bool != null;
    }
}
